package main

import (
	"context"
	"fmt"

	appsv1 "k8s.io/api/apps/v1" // 为 apps/v1 包指定别名
	corev1 "k8s.io/api/core/v1" // 为 core/v1 包指定别名
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	"k8s.io/client-go/kubernetes"
	"k8s.io/client-go/tools/clientcmd"
)

func main() {
	// 1. 加载 kubeconfig 文件
	kubeconfig := "../config/kubeconfig" // 替换为你的 kubeconfig 文件路径
	config, err := clientcmd.BuildConfigFromFlags("", kubeconfig)
	if err != nil {
		panic(err.Error())
	}

	// 2. 创建 Kubernetes 客户端
	clientset, err := kubernetes.NewForConfig(config)
	if err != nil {
		panic(err.Error())
	}

	// 3. 创建 Deployment
	deployment := &appsv1.Deployment{
		ObjectMeta: metav1.ObjectMeta{
			Name:      "my-deployment",
			Namespace: "default",
			Labels: map[string]string{
				"app": "nsd2409", // 匹配pod中的app
			},
		},
		Spec: appsv1.DeploymentSpec{
			Replicas: int32Ptr(3), // 设置副本数量
			Selector: &metav1.LabelSelector{
				MatchLabels: map[string]string{
					"app": "nsd2409", // 匹配pod中的app
				},
			},
			Template: corev1.PodTemplateSpec{ // 使用 corev1 包
				ObjectMeta: metav1.ObjectMeta{
					Labels: map[string]string{
						"app": "nsd2409", // 匹配pod中的app
					},
				},
				Spec: corev1.PodSpec{ // 使用 corev1 包
					Containers: []corev1.Container{ // 使用 corev1 包
						{
							Name:  "nginx",
							Image: "nginx:latest",
							Ports: []corev1.ContainerPort{ // 使用 corev1 包
								{
									ContainerPort: 80,
								},
							},
						},
					},
				},
			},
		},
	}

	// 4. 调用 Kubernetes API 创建 Deployment
	_, err = clientset.AppsV1().Deployments("default").Create(context.TODO(), deployment, metav1.CreateOptions{})
	if err != nil {
		panic(err.Error())
	}

	fmt.Println("Deployment created successfully")
}

// 辅助函数：将 int 转换为指针
func int32Ptr(i int32) *int32 {
	return &i
}
